package ui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JScrollBar;


/**
 * Esta clase representa el panel de comandos.
 * Se utiliza en el desarrolo de la aplicación correspondiente al
 * Trabajo Práctico Nº 1 de Diseño e Implementación de Estructuras de Datos.
 * Universidad Tecnológica Nacional - Facultad Regional Santa Fe.
 * 
 * @author Cátedra DIED 2007.
 */
public class PanelDeComandos extends JPanel implements KeyListener{
    private static final long serialVersionUID = -7565056578582724727L;
	private JTextArea lineaDeComandos;
	private JTextArea lineaDeSalida;
    private JScrollPane scrollPanelDeSalida;
    private JScrollBar barraVertical;
	private ScriptorPpal padre;
	/**
	 * Constructor del panel de comandos.
	 * @param padre		Aplicación.
	 */
	public PanelDeComandos(ScriptorPpal padre){
		super();
		this.padre=padre;
		inicializar(padre.getTamActual());
	}
	/**
	 * 
	 * @param size
	 */
	private void inicializar(Dimension size) {
		this.setBorder(BorderFactory.createRaisedBevelBorder());
		this.setPreferredSize(size);
		this.setMaximumSize(size);
		this.setLayout(new GridLayout(2,1));
		//Dimension sizeSalidas = new Dimension(size.width,size.height/12);
		Dimension sizeSalidas = new Dimension(size.width,size.height/12);
		Dimension sizePanel = new Dimension(size.width,size.height/6);
		this.setPreferredSize(sizePanel);
		this.setMaximumSize(sizePanel);
		this.lineaDeComandos = new JTextArea();
		this.lineaDeComandos.setPreferredSize(sizeSalidas);
		this.lineaDeComandos.setMaximumSize(sizeSalidas);
		this.lineaDeSalida = new JTextArea();
		this.lineaDeSalida.setPreferredSize(sizeSalidas);
		//this.lineaDeSalida.setMaximumSize(sizeSalidas);

        // Muestra en pantalla el size del panel
		System.out.print(sizePanel);
		this.lineaDeSalida.setEditable(false);
		this.lineaDeComandos.setBackground(Color.BLACK);
		this.lineaDeComandos.setForeground(Color.WHITE);
		this.lineaDeSalida.setBackground(Color.LIGHT_GRAY);
		this.lineaDeSalida.setForeground(Color.BLACK);
		this.lineaDeComandos.addKeyListener(this);
        // Probando el scroll en la linea de salida
        // VERTICAL_SCROLLBAR_AS_NEEDED
        // HORIZONTAL_SCROLLBAR_NEVER
        this.scrollPanelDeSalida = new JScrollPane(this.lineaDeSalida, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        this.scrollPanelDeSalida.setMinimumSize(new Dimension(size.width,100));
        //this.scrollPanelDeSalida.setMaximumSize(sizeSalidas);
		this.add(scrollPanelDeSalida);
		this.add(lineaDeComandos);
	}
	/**
	 * @param mensaje
	 */
	public void mensajeDeInformacion(String mensaje) {
		this.lineaDeSalida.setBackground(Color.LIGHT_GRAY);
		this.lineaDeSalida.setForeground(Color.BLACK);
		this.lineaDeSalida.setText(mensaje);
	}
    /**
     * Muestra el resultado de la busqueda en el panel.
     * @param msj
     */
    public void msjResultado(String msj){
        this.lineaDeSalida.setBackground(Color.LIGHT_GRAY);
		this.lineaDeSalida.setForeground(Color.BLACK);
        this.lineaDeSalida.append(msj + "\n");
    }
    /**
     * Borra el texto del panel de comandos
     * @param none
     */
    public void limpiar(){
       this.lineaDeSalida.setText("");
    }
	/**
	 * 
	 * @param mensaje
	 */
	public void mensajeDeError(String mensaje) {
		this.lineaDeSalida.setBackground(Color.WHITE);
		this.lineaDeSalida.setForeground(Color.RED);
		this.lineaDeSalida.setText(mensaje);
	}
	public void keyPressed(KeyEvent e) {
	}

	public void keyReleased(KeyEvent e) {
	}

   /**
	* @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
	*/
	public void keyTyped(KeyEvent e) {
		if(e.getKeyChar()==10){
			String comando=this.lineaDeComandos.getText();
			this.lineaDeComandos.setText("");
			this.lineaDeComandos.setEnabled(false);
			this.lineaDeComandos.setBackground(Color.DARK_GRAY);
			this.padre.recibirComando(comando);
			this.lineaDeComandos.setBackground(Color.BLACK);
			this.lineaDeComandos.setEnabled(true);
		}
        else if(e.getKeyChar()==KeyEvent.VK_ESCAPE){
            System.out.println("Presiono tecla escape linea de comandos");
            this.padre.getDocumentoActual().getAreaDeTexto().requestFocus();
        }
	}

    public JTextArea getLineaDeComandos(){
        return this.lineaDeComandos;
    }

}
